home *** CD-ROM | disk | FTP | other *** search
- // ----------------------------------------------------------------------- //
- //
- // MODULE : BloodServerShell.cpp
- //
- // PURPOSE : Blood's Server Shell - Definition
- //
- // CREATED : 9/18/97
- //
- // ----------------------------------------------------------------------- //
-
- #ifndef __BLOODSERVERSHELL_H__
- #define __BLOODSERVERSHELL_H__
-
- #include "cpp_server_de.h"
- #include "cpp_engineobjects_de.h"
- #include "cpp_servershell_de.h"
- #include "PathMgr.h"
- #include "NetDefs.h"
- #include "SharedDefs.h"
- #include "VoiceMgr.h"
- #include "TeamMgr.h"
-
- #define MAX_CLIENTS MAX_MULTI_PLAYERS
-
- class CPlayerObj;
-
-
- class CBloodServerShell : public CServerShellDE
- {
- public :
-
- CBloodServerShell();
- ~CBloodServerShell();
-
- void FragStatus();
- GameType GetGameType() const { return (GameType)m_GameInfo.m_byType; }
- const NetGame * GetNetGameInfo() const { return &m_GameInfo; }
- DBOOL IsMultiplayerGame() { return (m_GameInfo.m_byType != GAMETYPE_SINGLE); }
- DBOOL IsMultiplayerTeamBasedGame();
- DBOOL IsMultiplayerTeams() { return(m_GameInfo.m_byType == NGT_TEAMS); }
- DBOOL IsMultiplayerCtf() { return(m_GameInfo.m_byType == NGT_CAPTUREFLAG); }
- DBOOL IsMultiplayerSoccer() { return(m_GameInfo.m_byType == NGT_SOCCER); }
-
- PathMgr* GetPathMgr() { return &m_PathMgr; }
- CVoiceMgr* GetVoiceMgr() { return &m_VoiceMgr; }
- CTeamMgr* GetTeamMgr() { return(&m_TeamMgr); }
- void SetStartPointName(HSTRING hstrStartPt);
- HSTRING GetStartPointName() { return m_hstrStartPointName; }
- void SendBlood2ServConsoleMessage(char* sMsg);
- void SetUpdateBlood2Serv() { m_bUpdateBlood2Serv = DTRUE; }
- HCLIENT FindClient(HOBJECT hObject);
-
- #ifdef _ADD_ON
- DBOOL IsAddon() { return m_bAddonLevel; };
- #endif
-
- protected :
-
- BaseClass* OnClientEnterWorld(HCLIENT hClient, void* pClientData, DDWORD dwClientDataLen);
- void OnClientExitWorld(HCLIENT hClient);
- void OnMessage(HCLIENT hSender, DBYTE messageID, HMESSAGEREAD hMessage);
- void OnCommandOn(HCLIENT hClient, int command);
- void PreStartWorld(DBOOL bSwitchingWorlds);
- void PostStartWorld();
- void Update(DFLOAT timeElapsed);
- void UpdateClientPingTimes();
- void OnRemoveClient(HCLIENT hClient);
-
- DBOOL LoadWorld(HMESSAGEREAD hMessage);
- DBOOL SaveGame(DBYTE bySaveType, DBOOL bSavePlayers, DBOOL bSaveConsole);
- DBOOL RestoreGame(DBYTE bySaveType);
- // DBOOL BuildSavePath(char *pBuffer, char *pFilename);
- DBOOL KeepAliveSave();
- DBOOL KeepAliveLoad();
-
- void CacheFiles();
-
- void DoLevelChangeCharacterCheck(char* sLevel);
-
- private:
-
- int m_NumPlayers;
- BaseClass* CreatePlayer(HCLIENT hClient);
- void RespawnPlayer(BaseClass* pBaseClass, HCLIENT hClient);
- void ConsoleMessage(HCLIENT hClient, char *msg);
- void AddPlayerMessage(HCLIENT hDestClient, HCLIENT hNewPlayerClient);
- void AddPlayersMessage(HCLIENT hClient);
- void RemovePlayerMessage(HCLIENT hClient);
- void SetGameInfo(DBYTE nGameFlags, DBYTE nDifficulty);
- void SetupGameInfo();
-
- DBOOL UpdateSessionName();
- DBOOL UpdateBlood2Server();
- void UpdateMultiplayer();
- void StartNextMultiplayerLevel();
- void StartNextMultiplayerLevelAck();
- DRESULT ServerAppMessageFn(char* sMsg);
-
-
- void ClearClientList() { for (int i = 0; i < MAX_CLIENTS; i++) { m_aClients[i] = DNULL; } }
- DBOOL AddClientToList(HCLIENT hClient);
- DBOOL RemoveClientFromList(HCLIENT hClient);
- DBOOL IsClientInList(HCLIENT hClient);
- CPlayerObj* GetPlayerFromClientList(HCLIENT hClient);
-
- CVoiceMgr m_VoiceMgr;
- CTeamMgr m_TeamMgr;
- PathMgr m_PathMgr;
- HSTRING m_hstrStartPointName;
- DBOOL m_bKeepAlive;
- #ifdef _ADD_ON
- DBOOL m_bAddonLevel;
- #endif
-
- HCLIENT m_aClients[MAX_CLIENTS];
-
- NetGame m_GameInfo;
- DBOOL m_bBlood2ServHosted;
- DBOOL m_bUpdateBlood2Serv;
- int m_nCurLevel;
- };
-
-
- // Externs...
-
- extern CBloodServerShell* g_pBloodServerShell;
- extern char g_szVarRevisiting[];
- extern char g_szVarDifficulty[];
- extern char g_szVarGameType[];
-
-
- // Inlines...
-
- inline DBOOL CBloodServerShell::IsMultiplayerTeamBasedGame()
- {
- if (m_GameInfo.m_byType == NGT_CAPTUREFLAG) return(DTRUE);
- if (m_GameInfo.m_byType == NGT_TEAMS) return(DTRUE);
- if (m_GameInfo.m_byType == NGT_SOCCER) return(DTRUE);
-
- return(DFALSE);
- }
-
-
- // EOF...
-
- #endif // __BLOODSERVERSHELL_H__
-
-